package com.ruoyi.system.service;


import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * AdvisorService
 *
 * @author ruoyi
 * @date 2025-01-09
 */
public class AITongYiAdvisorService implements Function<AITongYiAdvisorService.Request, AITongYiAdvisorService.Response> {

    private final ChatMemory chatMemory;

    @Autowired
    public AITongYiAdvisorService(ChatMemory chatMemory) {
        this.chatMemory = chatMemory;
    }

    @Override
    public Response apply(Request request) {
        // 获取对话历史
        List<Message> conversationHistory = chatMemory.get("conversationId", 100);
        // 假设有一个会话ID

        // 提取对话历史中的文本内容
        List<String> historyText = conversationHistory.stream()
                .map(Message::getContent)
                .collect(Collectors.toList());

        // 分析对话历史中的关键词
        String keywords = analyzeKeywords(historyText);

        // 根据关键词生成响应
        String response = generateResponse(keywords);

        return new Response(response);
    }

    private String analyzeKeywords(List<String> history) {
        // 简单的关键词分析逻辑
        StringBuilder keywords = new StringBuilder();
        for (String message : history) {
            if (message.contains("编程语言")) {
                keywords.append("编程语言");
            }
            if (message.contains("工具")) {
                keywords.append("工具");
            }
            if (message.contains("框架")) {
                keywords.append("框架");
            }
            if (message.contains("技术栈")) {
                keywords.append("技术栈");
            }
            if (message.contains("项目")) {
                keywords.append("项目");
            }
            if (message.contains("语言版本")) {
                keywords.append("语言版本");
            }
            if (message.contains("框架版本")) {
                keywords.append("框架版本");
            }
            if (message.contains("API")) {
                keywords.append("API");
            }
            if (message.contains("项目构建方式")) {
                keywords.append("项目构建方式");
            }
        }
        return keywords.toString();
    }

    private String generateResponse(String keywords) {
        // 如果没有编程语言，先询问编程语言
        if (!keywords.contains("编程语言")) {
            return "请告诉我您想使用哪个编程语言？并以列表的方式罗列出常用的编程语言以作参考";
        }

        // 如果选择了编程语言，但没有版本，询问版本
        if (!keywords.contains("语言版本")) {
            return "您选择了编程语言，但需要选择一个版本，并以列表的方式罗列出常用的语言版本以作参考";
        }

        // 如果选择了编程语言和版本，但没有框架，询问框架
        if (!keywords.contains("框架")) {
            return "您选择了编程语言和版本，但没有选择框架。请告诉我您打算使用哪个框架？并以列表的方式罗列出常用的对应编程语言的框架以作参考\"";
        }

        // 如果选择了编程语言、版本和框架，但没有框架版本，询问框架版本
        if (!keywords.contains("框架版本")) {
            return "您选择了框架，但没有选择框架的版本。请告诉我您想使用的框架版本。";
        }

        // 如果选择了编程语言、版本、框架和框架版本，但没有工具，询问开发工具
        if (!keywords.contains("工具")) {
            return "您已经选择了编程语言、版本和框架，但需要选择一个开发工具。您希望使用哪个开发工具（如 IntelliJ IDEA、VS Code、Eclipse等）？";
        }

        // 如果都选择了，给出完整的回应
        return "您已选择编程语言、版本、框架、框架版本和开发工具。如果有其他需求或疑问，请告诉我。";
    }


    public record Request(String require) {
    }

    public record Response(String advise) {
    }
}
